package com.zhdl.modules.prefiresys.task;

import com.project.common.util.DelayUtil;
import com.zhdl.modules.prefiresys.conf.error.ErrorMsgDto;
import com.zhdl.modules.prefiresys.conf.error.ErrorMsgQueue;
import com.zhdl.modules.prefiresys.web.service.CollectService;
import com.zhdl.network.service.UpsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import static com.zhdl.modules.prefiresys.web.service.EventBusResult.upsBattery;
import static com.zhdl.modules.prefiresys.web.service.EventBusResult.upsMode;

/**
 * 定时采集UPS数据
 */
@Slf4j
@Component
public class CollectUps {

    private final CollectService collectService;

    @Autowired
    private UpsService upsService;

    @Autowired
    public CollectUps(CollectService collectService) {
        this.collectService = collectService;
    }

    // fixedRate 属性：定时任务开始后再次执行定时任务的延时（需等待上次定时任务完成），单位毫秒
    // fixedDelay 属性：定时任务执行完成后再次执行定时任务的延时（需等待上次定时任务完成），单位毫秒
    // @Scheduled(fixedRate = 1000 * 100)
//    @Scheduled(initialDelay = 2000, fixedDelay = 5000)


    /* 测试 */
    public void scheduledTask() {

        try {
            log.debug("定时任务 采集UPS数据");
            // 读电池供电还是市电供电
            // powerError 市电是否异常 1表示市电异常，表示当前是电池供电 0表示市电正常，当前是市电供电

            upsService.sendQ1();

            if (upsMode == -1){
                ErrorMsgQueue.push(new ErrorMsgDto("读UPS供电方式失败" + upsMode));
                return;
            }

            /* 电池类型 */
            collectService.sseResp.setPowerType(upsMode == 0 ? 1 : 2);

            // 读电量
            upsService.sendQ6();

            if (upsBattery == -1) {
                ErrorMsgQueue.push(new ErrorMsgDto("读UPS电量失败"));
                return;
            }

            /* 电池电量 */
            collectService.sseResp.setElectricQuantity(upsBattery);

        } catch (Exception exception) {
            log.error("UPS数据采集异常, {}", exception.getMessage(), exception);
        }
    }
}
